//N字形变换
//https://leetcode.cn/problems/zigzag-conversion/
public class Test {
    public static void main(String[] args) {
        //
    }
}

class Solution {
    public String convert(String s, int numRows) {
        //特殊情况特殊处理
        if (numRows == 1) {
            return s;
        }

        //
        StringBuilder res = new StringBuilder();
        char[] chars = s.toCharArray();
        int len = chars.length;

        //第一行规律：（最后一行规律亦如是）
        int d = 2*numRows-2;//“公差”
        for(int i = 0; i < len; i+=d){
            res.append(chars[i]);
        }

        //中间行规律 k——第k行（从0开始，但是0不算）
        for(int k = 1; k<numRows-1; k++){
            //对应 “同等增长”的 下标
            //int index = d-k;
            for(int i = k,j=d-i; i < len||j<len; i+=d,j+=d){
                if(i<len){
                    res.append(chars[i]);
                }

                if(j<len){
                    res.append(chars[j]);
                }
            }
        }
        //最后一行
        for(int i = numRows-1; i < len; i+=d){
            res.append(chars[i]);
        }
        return res.toString();
    }
}